
写Python函数就像做菜——用对的食材和步骤,才能端出让人惊艳的成品。但很多人的函数要么像“一锅乱炖”,要么复杂得像米其林菜谱,连自己都看不懂。今天,我用实际经验分享几个让Python函数既强大又优雅的方法。
1. 函数的第一原则:单一职责
问题:一个函数塞满几十行代码,既处理数据又调用API,最后还顺手写了日志。
解法:每个函数只做一件事,并做好它。
# 反面教材:功能混杂
def process_user_data(user):
# 验证数据
if not user.get("name"):
raise ValueError("用户名缺失")
# 保存到数据库
db.insert(user)
# 发送邮件
send_email(user["email"], "欢迎注册!")
# 优化后:拆分成单一职责的函数
def validate_user(user):
if not user.get("name"):
raise ValueError("用户名缺失")
def save_to_db(user):
db.insert(user)
def send_welcome_email(user):
send_email(user["email"], "欢迎注册!")
# 主函数清晰调用
def process_user_data(user):
validate_user(user)
save_to_db(user)
send_welcome_email(user)
为什么有效:
- 更易测试(每个函数可单独验证);
- 修改时不影响其他逻辑;
- 读代码像看说明书,一目了然。
2. 参数设计:别让调用者猜谜
常见坑:参数过多、默认值滥用、类型混乱。
技巧1:用关键字参数强制明确性
# 模糊调用:哪一个是用户名?哪一个是年龄?
create_user("Alice", 25)
# 优化后:强制关键字参数
def create_user(*, name: str, age: int):
pass
create_user(name="Alice", age=25) # 必须写明参数名,避免传错顺序
技巧2:限制参数数量
如果参数超过5个,考虑:
- 拆分成多个函数;
- 用字典或对象封装(如
**config
)。
3. 错误处理:提前防御,友好反馈
烂代码的典型表现:函数内部隐藏错误,调用者一脸懵。
# 反面教材:静默失败
def divide(a, b):
return a / b # 如果b=0,直接报错崩溃
# 优化后:主动防御 + 明确异常
def divide(a: float, b: float) -> float:
if b == 0:
raise ValueError("除数不能为零")
return a / b
进阶建议:
- 用类型注解(如
-> float
)提示返回类型; - 在文档字符串(
docstring
)中说明可能抛出的异常。
总结:好函数的3个特征
- 短小精悍:不超过20行,一眼看懂逻辑;
- 可预测:输入输出明确,避免隐藏副作用;
- 容错性强:对非法输入快速失败,而非默默崩溃。
下次写Python函数时,不妨自问:“这个函数如果交给别人维护,10秒内能看懂吗?” 如果答案是否定的,就按上面的方法优化吧!
(如果你遇到过其他函数编写的坑,欢迎在评论区分享~)
12321
Python函数编写指南:3个技巧让代码更强大

内容由AI生成仅供参考和学习交流,请勿使用于商业用途。
出处地址:http://www.dongblog.com/tech/1227.html,如若转载请注明原文及出处。
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。